//公用的请求
const baseurl = 'https://meituan.thexxdd.cn/api/'
//获取token //npm install --save js-base64
import { Base64 } from 'js-base64';
import type { Rescovidapi, Wxloginapi } from './decl-type';

// 类型声明
function getToken(): string {
    //同步获取token ：存进去有一个对象：wxuser，对象里面有一个user_token是token的键
    //另外取出来的这个token在传输的过程中是需要加密的，不然后台那边是不允许给与接口数据的
    const token = uni.getStorageSync('wxuser').user_token || ''
    const base64_token = Base64.encode(token + ':')//加冒号是后端那边约定的

    //这个前缀Base 也是后端约定好的加密token的
    return 'Basic ' + base64_token
}

//请求
interface ResData {
    data: { data: any[] };
    statusCode: number;
}
function request(url: string, method: 'GET' | 'POST', data: string | object | ArrayBuffer): Promise<ResData> {

    return new Promise((resolve, reject) => {
        uni.request({
            //键和值一样的时候写一个就行了
            url: baseurl + url,
            method,
            data,
            header: { Authorization: getToken() },
            success: (res: any) => {
                //200成功 401需要权限 500服务器发送错误 202某些字段没有填 400参数填写错误
                if (res.statusCode == 200) {
                    resolve(res)
                } else if (res.statusCode == 401) {
                    //没有权限访问接口 :跳转到登录界面
                    uni.navigateTo({ url: '/pages/login-page/index' });
                    reject(reject)

                } else if (res.statusCode == 400) {
					uni.showToast({
						title: '开发者某个字段或参数填写不对',
						icon: 'none',
						duration: 1000,
					});
					reject(res);
				}else if (res.statusCode == 500) {
                    uni.showToast({
                        title: '服务器发送错误',
                        icon: 'none',
                        duration: 1000
                    })
                    reject(res)
                } else if (res.statusCode == 202) {
                    uni.showToast({
                        title: '给与提示',
                        icon: 'none',
                        duration: 1000
                    })
                    reject(res)
                } else {
                    uni.showToast({
                        title: '服务器发生未知错误',
                        icon: 'none',
                        duration: 1000
                    })
                    reject(res)
                }

            },
            fail: (err: any) => {

                uni.showToast({
                    title: '服务器发生未知错误',
                    icon: 'none',
                    duration: 1000
                })
                reject(err)
            }

        })

    })
}

//接口
const RequestApi = {
    //首页数据
    FrontPage: () => request('frontpage', 'GET', {}),
    //疫苗预约时段
    NewappTime: () => request('newapptime', 'GET', {}),
    // 新冠疫苗提交预约
    RescoVid: (data: Rescovidapi) => request('rescovid', 'POST', data),
    // 小程序登陆
	WxLogin: (data: Wxloginapi) => request('wx_login', 'POST', data),
}

//export包住导出去
export {
    RequestApi
}